#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx,avx2,fma")
#pragma GCC target("sse4,popcnt,abm,mmx,tune=native")
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define eb emplace_back
#define F first
#define S second
#define all(x) (x).begin(), (x).end()
#define sz(x) int(x.size())
using ll = long long;
using ld = long double;
using ii = pair<int, int>;
using vi = vector<int>;
using vll = vector<ll>;
using vb = vector<bool>;
const int N = 1e5 + 5;
const int K = 21;
const ll mod = 998244353;
map<ll, ll> p2;
ll pw(ll x, ll y) {
if (p2.count(y) > 0) {
return p2[y];
}
if (y == 0) {
return 1;
}
ll k = pw(x, y / 2);
if (y & 1) {
return p2[y] = k * k % mod * x % mod;
}
return p2[y] = k * k % mod;
}
ll cnt_ways(ll n) {
if (n == 1) {
return 1;
}
ll l, r;
l = (n + 1) / 2;
r = n / 2;
return (pw(2, l) - 1) * (pw(2, r) - 1) % mod;
}
ll calc(vector<array<ll, 3>> vec) {
if (vec.empty()) {
return 0;
}
ll ans = 0;
vector<array<ll, 3>> tmp, new_vec;
for (auto x: vec) {
ans = (ans + cnt_ways(x[0]) * x[1] % mod) % mod;
if (x[0] == 1) {
continue;
}
if (x[0] % 2) {
tmp.pb({(x[0] + 1) / 2, x[1] * 2 % mod, x[2]});
tmp.pb({x[0] / 2, (x[1] * 2 + x[2]) % mod, x[2]});
} else {
tmp.pb({x[0] / 2, (x[1] * 4 + x[2]) % mod, x[2] * 2 % mod});
}
}
for (auto x: tmp) {
bool ok = false;
for (auto &y: new_vec) {
if (x[0] == y[0]) {
y[1] = (y[1] + x[1]) % mod;
y[2] = (y[2] + x[2]) % mod;
ok = true;
break;
}
}
if (!ok) {
new_vec.pb(x);
}
}
return (ans + calc(new_vec)) % mod;
}
int main() {
cin.tie(0)->sync_with_stdio(0);
int te;
cin >> te;
while (te--) {
ll n;
cin >> n;
ll ans = calc({{n, 1, 1}});
cout << ans << '\n';
}
return 0;
}
461. Hamming Distance | 1748. Sum of Unique Elements |
897. Increasing Order Search Tree | 905. Sort Array By Parity |
1351. Count Negative Numbers in a Sorted Matrix | 617. Merge Two Binary Trees |
1450. Number of Students Doing Homework at a Given Time | 700. Search in a Binary Search Tree |
590. N-ary Tree Postorder Traversal | 589. N-ary Tree Preorder Traversal |
1299. Replace Elements with Greatest Element on Right Side | 1768. Merge Strings Alternately |
561. Array Partition I | 1374. Generate a String With Characters That Have Odd Counts |
1822. Sign of the Product of an Array | 1464. Maximum Product of Two Elements in an Array |
1323. Maximum 69 Number | 832. Flipping an Image |
1295. Find Numbers with Even Number of Digits | 1704. Determine if String Halves Are Alike |
1732. Find the Highest Altitude | 709. To Lower Case |
1688. Count of Matches in Tournament | 1684. Count the Number of Consistent Strings |
1588. Sum of All Odd Length Subarrays | 1662. Check If Two String Arrays are Equivalent |
1832. Check if the Sentence Is Pangram | 1678. Goal Parser Interpretation |
1389. Create Target Array in the Given Order | 1313. Decompress Run-Length Encoded List |